//vant
import axios from "axios";

import { Toast, Dialog } from "vant";

import { Session } from "./storage";
import "vant/es/toast/style";
import "vant/es/dialog/style";

const BASE_URL = import.meta.env.VITE_APP_BASE_API;

// 配置新建一个 axios 实例
const myAxios = axios.create({
  // baseURL,
  // baseURL: BASE_URL,
  timeout: 20000, // 请求超时 20s
  withCredentials: true,
  headers: { "Content-Type": "application/json" },
});

// 请求拦截器（发起请求之前的拦截）
myAxios.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么 token
    if (Session.get("token")) {
      config.headers["Authorization"] = Session.get("token");
    }

    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器（获取到响应时的拦截）
myAxios.interceptors.response.use(
  (response) => {
    /**
     * 根据你的项目实际情况来对 response 和 error 做处理
     * 这里对 response 和 error 不做任何处理，直接返回
     */
    const res = response.data;
    if (!res.success && !["0", 0, "200", 200].includes(res.code)) {
      //401.Token 过期了
      if (res.code === 401 || res.code === 4001) {
        //! Do someThing

        Session.clear(); // 清除浏览器全部临时缓存
        // window.location.href = "/"; // 去登录页 或者做点什么
        Dialog.alert("你已被登出，请重新登录", "提示", {})
          .then(() => {})
          .catch(() => {});
      } else {
        console.error(res);
      }
      return Promise.resolve(response.data);
    }
    return response.data;
  },
  (error) => {
    // 对响应错误做点什么
    if (error.response && error.response.data) {
      const code = error.response.status;
      const msg = error.response.data.message;
      Toast({ message: `Code: ${code}, Message: ${msg}`, duration: 3 * 1000 });
      console.error(`[Axios Error]`, error.response);
    } else {
      Toast({ message: `${error}`, duration: 3 * 1000 });
    }
    return Promise.reject(error);
  }
);

export default myAxios;
